package sum;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

// 使用Callable计算：1+2+3+...+100
public class CallableSum {
    // JUC java.util.concurrent
    // Callable，和Runnable相似，也是描述一个任务，但是Callable是重写call方法且有返回值
    // 下面这个问题Runnable也可以使用，只是代码写起来较为麻烦
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        // 使用Callable计算：1+2+3+...+100
        Callable<Integer> callable = new Callable<Integer>() {
            @Override
            public Integer call() throws Exception {
                int sum = 0;
                for (int i = 0; i <= 100; i++) {
                    sum+=i;
                }
                return sum;
            }
        };
        FutureTask<Integer> futureTask = new FutureTask<>(callable);
        Thread t = new Thread(futureTask);
        t.start();

        // get方法是带有阻塞效果的，get会阻塞到有线程执行任务，执行call方法，返回一个值。
        Integer result = futureTask.get();
        System.out.println(result);
    }
}
